package org.grow.chat.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

/**
 * @Author: xwg
 * @CreateDate: 2022/1/9
 */

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfigCenter implements WebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
//        http 转 ws 的链接地址 ,该地址可以认为是一个http请求的地址
        String server = "wangtong1";
//        是前端发送connect行为 需要明确的参数 如 http://localhost:11111/chat
        registry.addEndpoint("/" + server)
                .setAllowedOrigins("*");
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
//        开放可以订阅的频道目录 也就是共享的目录  注意 具体的频道/主题 即是文件也是文件夹 是需要
//        notice 用来做app的事件通知
//        String[] dests = {"/topic", "/world", "/union", "/notice"};
//        实际sub地址 /exchange/world/
//        /exchange/[exchangename]/[routekey]
        String[] dests = {"/exchange"};
//        registry.enableSimpleBroker(dests);
        registry.enableStompBrokerRelay(dests)
                .setRelayHost("172.17.0.4")
                .setRelayPort(61613)
                .setVirtualHost("/world")
                .setClientLogin("admin")
                .setClientPasscode("admin")
                .setSystemLogin("admin")
                .setSystemPasscode("admin");

        //点对点使用的订阅前缀（客户端订阅路径上会体现出来），不设置的话，默认也是/user/ 前端监听的前缀
//        感觉理论上应该是用以宏观区分http请求和stomp协议 与返回客户端 但是实际上不起作用
//        registry.setUserDestinationPrefix("/user");
//        举例 前端用户监听 理论地址  /user/topic/xxx 实际上是 /topic/xxx 不论是监听还是convertAndSend

//        转发给messageMapping处理函数  全局使用的消息前缀
//        以次前缀来宏观区分 http请求和stomp协议前缀  类似tomcat 的servlet path 或者类上的requestMapping
        registry.setApplicationDestinationPrefixes("/ws");
//        举例 前端用户发送信息 地址 /ws/yyy  yyy是handler中的messageMapping
    }
}
